/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package manejadores;

import dominio.Accidente;
import dominio.AreaDeRiesgo;
import dominio.FactorDeRiesgo;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Properties;

/**
 *
 * @author d015532
 */
public class ManejoArchivos {
    
    public ArrayList<FactorDeRiesgo> CargarFactoresDeRiesgo(){
        
        Properties prop = this.getArchivoProperties();
        String ruta = prop.getProperty("rutaFactoresDeRiesgo");
        System.out.println("La ruta de Los Factores de Riesgo es: " + ruta);
        ArrayList<FactorDeRiesgo> salida = new ArrayList<FactorDeRiesgo>();
        try{
            // Abrimos el archivo
            FileInputStream fstream = new FileInputStream(ruta);
            // Creamos el objeto de entrada
            DataInputStream entrada = new DataInputStream(fstream);
            // Creamos el Buffer de Lectura
            BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
            String strLinea;
            // Leer el archivo linea por linea
            while ((strLinea = buffer.readLine()) != null)   {
                // Imprimimos la línea por pantalla
                String[] lista;
                String cadena = strLinea;
                lista = cadena.split(";");
                String idF = lista[0].toString();
                String nomF = lista[1].toString();
                String descrF = lista[2].toString();
                boolean monitF = false;
//                if (lista[3].toString().equals("true"))
//                        monitF = true;
                FactorDeRiesgo factor = new FactorDeRiesgo(idF,nomF,descrF,monitF);
                System.out.println(factor.toString());
                salida.add(factor);
                             
//                for (int i=0; i< lista.length ; i++){
//                    //salida.add(lista[i].toString());
//                }
            }
            //Imprimo la lista de topiocos
            //System.out.println("La lista luego de hacer el split " + salida);
            
            // Cerramos el archivo
            entrada.close();
        }catch (Exception e){ //Catch de excepciones
            System.err.println("Ocurrio un error: " + e.getMessage());
        }
        return salida;
    }
    
    public ArrayList<AreaDeRiesgo> CargarAreasDeRiesgo(){
        Properties prop = this.getArchivoProperties();
        String ruta = prop.getProperty("rutaAreasDeRiesgo");
        System.out.println("La ruta de las Areas de Riesgo es: " + ruta);
        ArrayList<AreaDeRiesgo> salida = new ArrayList<AreaDeRiesgo>();
        try{
            // Abrimos el archivo
            FileInputStream fstream = new FileInputStream(ruta);
            // Creamos el objeto de entrada
            DataInputStream entrada = new DataInputStream(fstream);
            // Creamos el Buffer de Lectura
            BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
            String strLinea;
            // Leer el archivo linea por linea
            while ((strLinea = buffer.readLine()) != null)   {
                // Imprimimos la línea por pantalla
                String[] lista;
                String cadena = strLinea;
                lista = cadena.split(";");
                String idArea = lista[0].toString();
                String nomArea = lista[1].toString();
                String capacitArea = lista[2].toString();
                String factoresRiesgo = lista[3].toString();
                AreaDeRiesgo area = new AreaDeRiesgo(idArea,nomArea,capacitArea,factoresRiesgo);
                
                salida.add(area);
            }
            
            // Cerramos el archivo
            entrada.close();
        }catch (Exception e){ //Catch de excepciones
            System.err.println("Ocurrio un error: " + e.getMessage());
        }
        return salida;
    }
    
    public ArrayList<Accidente> CargarAccidentes() {
        Properties prop = this.getArchivoProperties();
        String ruta = prop.getProperty("rutaAccidentes");
        System.out.println("La ruta de los Accidentes es: " + ruta);
        ArrayList<Accidente> salida = new ArrayList<Accidente>();
        try{
            // Abrimos el archivo
            FileInputStream fstream = new FileInputStream(ruta);
            // Creamos el objeto de entrada
            DataInputStream entrada = new DataInputStream(fstream);
            // Creamos el Buffer de Lectura
            BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
            String strLinea;
            // Leer el archivo linea por linea
            while ((strLinea = buffer.readLine()) != null)   {
                // Imprimimos la línea por pantalla
                String[] lista;
                String cadena = strLinea;
                lista = cadena.split(";");
                String idAccidente = lista[0].toString();
                String idArea = lista[1].toString();
                String fecha = lista[2].toString();
                String hora = lista[3].toString();
                String cantInvoluc = lista[4].toString();
                String[] impactos = lista[5].toString().split("#");
                ArrayList<String> listaImpactos = new ArrayList<String>();
                //ojo que si se cae aca probar el for con cantInvoluc - 1
                for(int i = 0; i<Integer.parseInt(cantInvoluc);i++){
                    listaImpactos.add(impactos[i]);
                }
                
                Accidente accidente = new Accidente(idAccidente,idArea,fecha,hora, cantInvoluc, listaImpactos);
                
                salida.add(accidente);
            }
            
            // Cerramos el archivo
            entrada.close();
        }catch (Exception e){ //Catch de excepciones
            System.err.println("Ocurrio un error: " + e.getMessage());
        }
        return salida;
    }
    
//    public boolean ExisteFuenteEnArchivo(String idFuente, String codFuente)
//    {
//        boolean existe = false;
//        Properties prop = this.obtenerArchivoProperties();        
//        String ruta = prop.getProperty("rutaFuentes");
//        System.out.println("La ruta de Fuentes es: " + ruta);
//        try{
//            // Abrimos el archivo
//            FileInputStream fstream = new FileInputStream(ruta);
//            // Creamos el objeto de entrada
//            DataInputStream entrada = new DataInputStream(fstream);
//            // Creamos el Buffer de Lectura
//            BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
//            String strLinea;
//            // Leer el archivo linea por linea
//            while ((strLinea = buffer.readLine()) != null)   {
//                // Imprimimos la línea por pantalla
//                String[] lista;
//                String cadena = strLinea;
//                lista = cadena.split(";");
//                String idLinea = lista[0];
//                String codLinea = lista[1];
//                if (idLinea.equals(idFuente) && codLinea.equals(codFuente))
//                {
//                    existe = true;
//                }
//            }
//            //Imprimo si existe la fuente
//            System.out.println("La fuente existe?: " + existe);
//            
//            // Cerramos el archivo
//            entrada.close();
//        }catch (Exception e){ //Catch de excepciones
//            System.err.println("Ocurrio un error: " + e.getMessage());
//        }
//        
//        return existe;
//    }
    
    public void GuardarTextoEnArchivo(String texto, String ruta){
        //guarda linea nueva en cualquier archivo ubicado en la ruta pasada
        try 
        {
                BufferedWriter out = new BufferedWriter(new FileWriter(ruta, true));
                out.write(texto);
                out.newLine();
                out.close();
        } catch (IOException e) 
        {
            System.out.println("Error en GuardarTextoEnArchivo" + e.getMessage());
        } 
    }
    public void GuardarAreaRiesgoEnArchivo(String texto){
        Properties prop = this.getArchivoProperties();
        String ruta = prop.getProperty("rutaAreasDeRiesgo");
        System.out.println("La ruta de Areas de Riesgo es: " + ruta);
        GuardarTextoEnArchivo(texto, ruta);
    }
    
    public void GuardarAccidenteEnArchivo(String texto){
        Properties prop = this.getArchivoProperties();
        String ruta = prop.getProperty("rutaAccidentes");
        System.out.println("La ruta de Accidentes es: " + ruta);
        GuardarTextoEnArchivo(texto, ruta);
    }
    
    public Properties obtenerArchivoProperties ()
    {
        
        try {
            // TODO code application logic here
            //InputStream in = ManejoArchivos.class.getResourceAsStream("config.properties");
            URL path = ManejoArchivos.class.getResource("config.properties");
            FileInputStream file = new FileInputStream(path.getFile());
            Properties props = new Properties();
            System.out.println("ruta config.properties: "+path.toString());
//            props.load(new FileInputStream(path.toString()));
            props.load(file);
            
            if (!props.isEmpty()) 
            {                
                return props;
            } else {//sino  retornara NULL
                return null;
            }
            
            
            
        } catch (IOException ex) {
            System.out.println("Error: "+ex);
            return null;
        }
    }
    
    public Properties getArchivoProperties (){
       try {
             //TODO code application logic here
            //InputStream in = ManejoArchivos.class.getResourceAsStream("config.properties");
//            URL path = ManejoArchivos.class.getResource("config.properties");
//            FileInputStream file = new FileInputStream(path.getFile());
            Properties props = new Properties();
//            System.out.println("ruta config.properties: "+path.toString());
            props.load(new FileInputStream("config.properties"));
//            props.load(new FileInputStream(path.toString()));
//            props.load(file);
            
            if (!props.isEmpty()) 
            {                
                return props;
            } else {//sino  retornara NULL
                return null;
            }
            
            
            
        } catch (IOException ex) {
            System.out.println("Error: "+ex);
            return null;
        } 
    }
    
    
}
